unit form_teste;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  RDprint, StdCtrls, Buttons, ExtCtrls, Db, DBTables;

type
  TForm1 = class(TForm)
    rdp: TRDprint;
    Timer1: TTimer;
    procedure FormActivate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure rdpBeforeNewPage(Sender: TObject; Pagina: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

function Imprime_Duplicata(h: THandle; lpar_serie,lpar_notaini,lpar_notafim,lpar_iniciar,lpar_encerrar: pchar): boolean; export;

implementation

uses biblio,clsNotaVenda,clsEntidade,clsBackupVenda,clsEndereco,clsCidade,dm,
     clsParametros;

var fecha       : boolean;
    par_serie   : string;
    par_notaini : string;
    par_notafim : string;
    par_iniciar : TDateTime;
    par_encerrar: TDateTime;

{$R *.DFM}

function Imprime_Duplicata;
var iniciar : string;
    encerrar: string;
    w       : integer;
begin
 par_serie  := '';
 par_notaini:= '';
 par_notafim:= '';
 iniciar    := '';
 encerrar   := '';
 for w:= 0 to length(lpar_serie)-1    do par_serie  := par_serie+lpar_serie[w];
 for w:= 0 to length(lpar_notaini)-1  do par_notaini:= par_notaini+lpar_notaini[w];
 for w:= 0 to length(lpar_notafim)-1  do par_notafim:= par_notafim+lpar_notafim[w];
 for w:= 0 to length(lpar_iniciar)-1  do iniciar    := iniciar+lpar_iniciar[w];
 for w:= 0 to length(lpar_encerrar)-1 do encerrar   := encerrar+lpar_encerrar[w];
 par_iniciar       := strtodate(iniciar);
 par_encerrar      := strtodate(encerrar);
 fecha             := false;
 Application.Handle:= h;
 form1             := TForm1.Create(Application);
 try
  form1.Width := 0;
  form1.Height:= 0;
  form1.ShowModal;
 finally
  form1.free;
 end;
 result:= true;
end;

procedure TForm1.FormActivate(Sender: TObject);
var tq,tq1     : TQuery;
    exte1,exte2: string;
    exte3,ext1 : string;
    ext2,not1  : string;
    not2,not3  : string;
    a,pg       : Integer;
    var1       : atext;
    bkp_numero : string;
    a1,a2,a3,a4: string;
    a5         : string;
    nota       : TNotaVenda;
    entidade   : TEntidade;
    backup     : TBackupVenda;
    endereco   : TEndereco;
    cidade     : TCidade;
    parametros : TParametros;
begin
 backup                := TBackupVenda.Create;
 nota                  := TNotaVenda.Create;
 entidade              := TEntidade.Create;
 endereco              := TEndereco.Create;
 cidade                := TCidade.Create;
 parametros            := TParametros.Create;
 parametros.Recuperar('1');
 tq1                   := TQuery.Create(self);
 tq1.DatabaseName      := DmInt.Db.DatabaseName;
 tq1.Active            := false;
 tq                    := TQuery.Create(self);
 tq.DatabaseName       := DmInt.Db.DatabaseName;
 tq.Active             := false;
 tq.sql.clear;
 tq.Params.clear;
 if par_iniciar+par_encerrar<>0 then begin
  if trim((par_serie+par_notaini+par_notafim))='' then
   tq.sql.add('Select * from notavenda where notv_datafat>=:K_data_ini and '+
              'notv_datafat<=:K_data_fim')
  else begin
   backup.RecuperarNota(par_serie,par_notaini,not1,not3);
   backup.RecuperarNota(par_serie,par_notafim,not2,not3);
   tq.sql.add('Select * from notavenda where Nota_Serie=:k_serie and Nota_Numero>=:k_nota1 '+
              'and Nota_Numero<=:k_nota2 and notv_datafat>=:K_data_ini and '+
              'notv_datafat<=:K_data_fim');
   tq.ParamByName('k_serie').asstring:= par_serie;
   tq.ParamByName('k_nota1').asstring:= not1;
   tq.ParamByName('k_nota2').asstring:= not2;
  end;
  tq.ParamByName('K_data_ini').AsDatetime:= par_iniciar;
  tq.ParamByName('K_data_fim').AsDatetime:= par_encerrar;
 end else begin
  backup.RecuperarNota(par_serie,par_notaini,not1,not3);
  backup.RecuperarNota(par_serie,par_notafim,not2,not3);
  tq.sql.add('Select * from notavenda where Nota_Serie=:k_serie and Nota_Numero>=:k_nota1 '+
             'and Nota_Numero<=:k_nota2');
  tq.ParamByName('k_serie').asstring:= par_serie;
  tq.ParamByName('k_nota1').asstring:= not1;
  tq.ParamByName('k_nota2').asstring:= not2;
 end;
 tq.open;
 pg:= 0;
 with rdp do begin
  Abrir;
  while not tq.eof do begin
   tq1.close;
   tq1.sql.clear;
   tq1.Params.Clear;
   tq1.sql.add('Select * from titcredito where Nota_Serie=:k_serie and nota_numero=:k_nota '+
               'and Ent_Codigo=:k_entidade');
   tq1.ParamByName('k_serie').AsString   := tq.fieldbyname('Nota_Serie').asstring;
   tq1.ParamByName('k_nota').AsString    := tq.fieldbyname('Nota_Numero').asstring;
   tq1.ParamByName('k_entidade').AsString:= tq.fieldbyname('Ent_Codigo').asstring;
   tq1.open;
   while not tq1.eof do begin
    if pg>0 then novapagina;
    pg:=pg + 1;
    nota.Recuperar(tq1.fieldbyname('nota_serie').asstring,tq1.fieldbyname('nota_numero').asstring,'',tq1.fieldbyname('ent_codigo').asstring);
    impf(8,52,tq1.fieldbyname('titc_dataemis').AsString,[comp17]);
    impf(12,08,Mascara_Valor(floattostr(nota.Notv_valorcontabil)),[comp17]);
    backup.RecuperarBackup(tq1.fieldbyname('nota_serie').asstring,tq1.fieldbyname('nota_numero').asstring,bkp_numero);
    impf(12,18,bkp_numero,[comp17]);
    impf(12,29,Mascara_Valor(tq1.fieldbyname('titc_valor').AsString),[comp17]);
    impf(12,45,tq1.fieldbyname('titc_numero').AsString,[comp17]);
    impf(12,60,tq1.fieldbyname('titc_datavenc').AsString,[comp17]);
    entidade.Recuperar(tq1.fieldbyname('ent_codigo').AsString);
    impf(18,24,entidade.Ent_Nome,[comp17]);
    endereco.Recuperar_primeiro(tq1.fieldbyname('ent_codigo').AsString);
    impf(19,24,endereco.End_Endereco,[comp20]);
    cidade.Recuperar(endereco.Cid_Codigo);
    impf(20,24,cidade.Cid_Nome,[comp20]);
    impf(20,63,cidade.Cid_est_sigla,[comp20]);
    impf(21,63,endereco.End_Cep,[comp20]);
    endereco.Recuperar_cobranca(tq1.fieldbyname('ent_codigo').AsString,parametros.tipo_endcobranca);
    impf(21,24,endereco.End_Endereco+'- '+endereco.End_bairro,[comp20]);
    if entidade.Ent_Cnpj<>'' then begin
     a1:= copy(entidade.Ent_Cnpj,1,2);
     a2:= copy(entidade.Ent_Cnpj,3,3);
     a3:= copy(entidade.Ent_Cnpj,6,3);
     a4:= copy(entidade.Ent_Cnpj,9,4);
     a5:= copy(entidade.Ent_Cnpj,13,2);
     impf(22,24,a1+'.'+a2+'.'+a3+'/'+a4+'-'+a5,[comp12])
    end else impf(22,24,entidade.Ent_Cpf,[comp12]);
    impf(22,63,entidade.Ent_Inscest,[comp20]);
    exte1 := '';
    exte2 := '';
    exte3 := '';
    Extenso(tq1.fieldbyname('titc_valor').AsFloat,255,255,ext1,ext2,4,' ');
    var1  := Ret_TextJ(ext1,90);
    for a:=1 to length(var1) do begin
     case a of
      1 : Exte1:= var1[a-1];
      2 : Exte2:= var1[a-1];
      3 : Exte3:= var1[a-1];
     end;
    end;
    impf(25,23,exte1,[comp20]);
    if exte2<>'' then begin
     impf(26,23,exte2,[comp20]);
     if exte3<>'' then impf(27,23,exte3,[comp20]);
    end;
    tq1.next;
   end;
   tq.next;
  end;
  Setup;
  Fechar;
 end;
 tq.close;
 tq.free;
 tq1.close;
 tq1.free;
 parametros.free;
 cidade.free;
 endereco.free;
 entidade.free;
 backup.free;
 nota.free;
 fecha          := true;
 Timer1.Interval:= 1;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 if fecha then close;
end;

procedure TForm1.rdpBeforeNewPage(Sender: TObject; Pagina: Integer);
begin
 if rdp.Impressora=Epson then rdp.acentuacao:=SemAcento else rdp.acentuacao:=Transliterate;
end;

initialization
begin
 dmint:= TDmint.Create(application);
end;

finalization
begin
 dmint.free;
end;

end.
